// 存储购物车数据
import mergeLocalCart from '@/api/user'
// 购物车状态
export default {
  namespaced: true,
  state: () => ({
    list: []
  }),
  getters: {
    // 购物车有效商品列表
    validList: state => {
      return state.list.filter(good => good.isEffective)
    },
    // 有效的总数量
    totalCounts (state, getters) {
      return getters.validList.reduce((acc, good) => acc + good.count, 0)
    },
    // 有效总价
    totalPrices (state, getters) {
      return getters.validList.reduce((acc, good) => acc + good.count * good.nowPrice, 0)
    },
    // 选中列表
    seledList (state, getters) {
      return getters.validList.filter(item => item.selected)
    },
    // 选中的列表总价
    seledListTotalPrices (state, getters) {
      return getters.seledList.reduce((acc, good) => acc + good.count * good.nowPrice, 0)
    },
    // 是否全部选中
    isAll (state, getters) {
      return getters.validList.every(good => good.selected)
    }
  },
  mutations: {
    addCart (state, good) {
      // 查找是否已存在索引
      const isHaveIndex = state.list.findIndex(item => item.skuId === good.skuId)
      // 判断是否存在
      if (isHaveIndex > -1) {
        // 存在就加数量
        state.list[isHaveIndex].count += good.count
      } else {
        // 不存在就添加到上面一个
        state.list.unshift(good)
      }
    },
    delCart (state, good) {
      const index = state.list.findIndex(item => item.skuId === good.skuId)
      state.list.splice(index, 1)
    },
    // 单选商品
    singleCheck (state, { good, isCheck }) {
      /**
       * 1. 获取要修改的商品
       * 2. 使用这个商品修改选中状态
       */
      const currGood = state.list.find(item => item.skuId === good.skuId)
      currGood.selected = isCheck
    },
    // 全选
    selAllGoods  (state, selected) {
      state.list.forEach(good => {
        good.selected = selected
      })
    },
    // 商品修改数量
    changeCount (state, { newCount, good }) {
      /**
               * 1. 获取要修改的商品
               * 2. 使用这个商品修改最新数量
               */
      const currGood = state.list.find(item => item.skuId === good.skuId)
      currGood.count = newCount
    }
  },
  actions: {
    async mergeCartAction ({ state }) {
      if (!state.list.length) return
      const newCartList = state.list.map(({ skuId, selected, count }) => {
        return { skuId, selected, count }
      })
      await mergeLocalCart(newCartList)
    },
    // rootState获取store的根=》通过根可以获取其它模块的数据
    // good 当前加入购物车商品
    async addCartActions ({ commit, rootState }, good) {
      // commit('updateValue', payload)
      if (rootState.user.profile.token) {
        // 已登录
      } else {
        // 未登录
        commit('addCart', good)
      }
    },
    async delCartAction  ({ commit, rootState }, good) {
      // commit('updateValue', payload)
      if (rootState.user.profile.token) {
        // 已登录
      } else {
        // 未登录
        commit('delCart', good)
      }
    },
    async singleCheckAction  ({ commit, rootState }, good) {
      // commit('updateValue', payload)
      if (rootState.user.profile.token) {
        // 已登录
      } else {
        // 未登录
        commit('singleCheck', good)
      }
    },
    async selAllGoodsAction  ({ commit, rootState }, good) {
      // commit('updateValue', payload)
      if (rootState.user.profile.token) {
        // 已登录
      } else {
        // 未登录
        commit('selAllGoods', good)
      }
    },
    async changeCountAction  ({ commit, rootState }, good) {
      // commit('updateValue', payload)
      if (rootState.user.profile.token) {
        // 已登录
      } else {
        // 未登录
        commit('changeCount', good)// 修改过的
      }
    }
  }
}
